class: inverse,left, middle background-image: url(data:image/png;base64,#background.png) background-size: cover <img src="data:image/png;base64,#LOGO_DIPLOMADO.png" width="500px"/> ##Módulo 1: Manipulación y Análisis de Datos Geoespaciales ### Introducción a R MatÃas Olea <br> <a href="https://orcid.org/0000-0003-0194-7784"> ORCID </a><br> matias.olea@pucv.cl</a><br> .large[<b><a href="https://www.pucv.cl/uuaa/site/edic/base/port/labgrs.html">LabGRS</a> | Agosto 2023</b>] <br> --- class: center,middle background-image: url(data:image/png;base64,#labgrs_logo.png) background-size: 35% --- ## Contenidos .pull-left[ 1) Que es R. 2) Los elementos esenciales de R: Script, objetos, funciones y paquetes. 3) La apertura y manipulación de datos alfanuméricos y numéricos. 4) La creación de funciones y ciclos. ] .pull-right[ <img src="data:image/png;base64,#https://raw.githubusercontent.com/allisonhorst/stats-illustrations/main/rstats-artwork/r_rollercoaster.png" width="650px"/> ] --- ## Introducción a R ### ¿Qué es R? -- - R es un lenguaje y entorno para la computación estadÃstica y gráficos. Es un proyecto GNU*. R proporciona una amplia variedad de estadÃsticos (como modelos lineales y no lineales, test, analisis de series de tiempo, clasificaciones, clustering, etc.) y técnicas gráficas. -- - Una de las grandes ventajas de R es la facilidad con la que se pueden producir diagramas bien diseñados con la calidad de publicación, que incluyen sÃmbolos matemáticos y fórmulas dónde sea necesario. .footnote[ <span style="font-size:9pt"> * GNU es un sistema operativo gratuito <br> Fuente: r-project.org </span> ] --- ## R <center><img src="data:image/png;base64,#R-project.png" height="80%" /></center> --- ### El entorno de R R es una interfaz integrada para manipulación de datos que incluye: -- - Un efectivo manejo de datos y facilidades de almacenamiento. -- - Una interfaz de operación para cálculos en colecciones de datos, especialmente matrices. -- - Una gran, coherente e integrada colección de herramientas para el análisis. -- - Facilidades gráficas para análisis de datos y visualización de ellos, y -- - Un desarrollado, simple y efectivo lenguaje de programación que incluyen condicionales, ciclos, funciones recursivas diseñadas o definidas por los usuarios, y más. .footnote[ <span style="font-size:9pt"> Fuente: r-project.org </span> ] --- ### ¿Qué es R? -- - R es un software de **libre acceso** (gratuito y abierto) para el análisis estadÃstico. -- - Es un pseudo-lenguaje de programación orientado a **''objetos''** -- - Hoy en dÃa, R no es solo una herramienta de análisis estadÃstico. Gracias a su potencialidad se ha transformado en una herramienta para analizar imágenes satelitales, datos del océano, variables biogeográficas, muestras dendro-cronológicas, cambio climático, etc… incluso se pueden hacer mapas. --- ### ¿Qué significa orientado a **objetos**? -- .pull-left[ Significa que si nosotros queremos aplicar una operación (función) podemos aplicárselo a un **"algo"** dentro del entorno de R, y ese "algo" va a ser un **"contenedor"** dónde almacenaremos variables o bases de datos, como por ejemplo números, palabras, vectores, tablas, etc. De esta forma, dependiendo que elemento contegamos es nuestro objeto, se definirá la **clase** del objeto. ] -- .pull-right[ <img src="data:image/png;base64,#Objeto_de_R.png" width="400px" align = "center"/> ] --- ### Creación de un objeto de R -- Para crear un objeto debemos definir un nombre para asignarle al objeto que debe ser alfabético o alfanumérico. -- Definido el nombre debemos indicarle una dirección a través del sÃmbolo **<-** seguido de lo que almacenaremos en el objeto como se ve aquÃ: -- ```r objeto_1 <- 25 objeto_2 <- "delfin" ``` -- Debemos considerar que los caracteres deben ir entre comillas, sino R los reconoce como objetos de R. -- ```r objeto_2 <- delfin ```  --- ### Tipos de objetos en R Existen varias **"clases"** (o tipos) de objetos. Y va a depender de lo que "almacenemos" dentro: -- .left-column[ <center><img src="data:image/png;base64,#Objeto_vector.png" height="400px" /></center> ] .right-column[ - **Vector**: secuencia de valores, o valores únicos de tipo numéricos (enteros, dobles/decimales), lógicos, complejos y de caracteres. ] --- ### Tipos de objetos en R Existen varias **"clases"** (o tipos) de objetos. Y va a depender de lo que "almacenemos" dentro: .left-column[ <center><img src="data:image/png;base64,#DF_MX2.png" height="400px" /></center> ] .right-column[ - Vector: secuencia de valores, o valores únicos de tipo numéricos (enteros, dobles/decimales), lógicos, complejos y de caracteres. - **Data Frame**: tabla bidemensional formada por lineas/filas (observaciones) y columnas (variables). Dentro de su estructura, las columnas pueden ser vectores numéricos o de caracteres. Una caracteristica de este es que almacena "headers" que nombran la variable, pero este no forma parte de la base de datos en si misma. - **Matriz**: es un arreglo bidimensional al igual que el Data Frame, formado por la intersección filas y columnas que almacenan valores en celdas. No son capaces de almacenar "headers" pero se pueden indicar "nombres". ] --- ### Tipos de objetos en R Existen varias **"clases"** (o tipos) de objetos. Y va a depender de lo que "almacenemos" dentro: .left-column[ <center><img src="data:image/png;base64,#Objeto_lista.png" height="400px" /></center> ] .right-column[ - Vector: secuencia de valores, o valores únicos de tipo numéricos (enteros, dobles/decimales), lógicos, complejos y de caracteres. - Data Frame: tabla bidemensional formada por lineas/filas (observaciones) y columnas (variables). Dentro de su estructura, las columnas pueden ser vectores numéricos o de caracteres. Una caracteristica de este es que almacena "headers" que nombran la variable, pero este no forma parte de la base de datos en si misma. - Matriz: es un arreglo bidimensional al igual que el Data Frame, formado por la intersección filas y columnas que almacenan valores en celdas. No son capaces de almacenar "headers" pero se pueden indicar "nombres". - **Lista**: compilación de datos enlistados, pueden ser de varias clases. ] --- ### Tipos de objetos en R Existen varias **"clases"** (o tipos) de objetos. Y va a depender de lo que "almacenemos" dentro: .left-column[ <center><img src="data:image/png;base64,#Objeto_lista2.png" height="400px" /></center> ] .right-column[ - Vector: secuencia de valores, o valores únicos de tipo numéricos (enteros, dobles/decimales), lógicos, complejos y de caracteres. - Data Frame: tabla bidemensional formada por lineas/filas (observaciones) y columnas (variables). Dentro de su estructura, las columnas pueden ser vectores numéricos o de caracteres. Una caracteristica de este es que almacena "headers" que nombran la variable, pero este no forma parte de la base de datos en si misma. - Matriz: es un arreglo bidimensional al igual que el Data Frame, formado por la intersección filas y columnas que almacenan valores en celdas. No son capaces de almacenar "headers" pero se pueden indicar "nombres". - **Lista**: compilación de datos enlistados, pueden ser de varias clases. ] --- ### Elementos de R De manera simplista, podemos definir ... -- **Paquetes** Conjunto de funciones almacenadas en un mismo repositorio. -- **Funciones** Operaciones o aplicaciones que se ejecutan a un conjunto de elementos o a objetos de R. -- **Argumentos** Cada función contiene un cierto número de argumentos o parámetros que permiten que la función sea aplicada. --- <center><img src="data:image/png;base64,#RStudio.png" height="80%" /></center> --- ### Aplicando conceptos -- Creando objetos con la función concatenar **c()** de R base. -- ```r constelaciones <- c("Pegasus", "Cetus", "Hydra", "Equuleus") abreviaturas <- c("Peg", "Cet", "Hya", "Equ") numeros <- c(177,189,238,16) secuencia <- c(1:50) ``` -- Consultamos su clase usando la función **class()** -- ```r class(constelaciones) ``` ``` ## [1] "character" ``` ```r class(numeros) ``` ``` ## [1] "numeric" ``` ```r class(secuencia) ``` ``` ## [1] "integer" ``` --- ### Funciones más comunes ```r mean() # Promedio median() # Mediana sd() # Desviación estandar sum() # Sumatorias exp() # Exponenciales sqrt() # Raiz cuadrada abs() # valores absolutos pi # para el número Pi ``` -- ```r mean(c(50,70,98,68)) ``` ``` ## [1] 71.5 ``` -- ```r objeto_numeros <- c(50,70,98,68) sum(objeto_numeros) ``` ``` ## [1] 286 ``` --- ### Funciones más comunes #### Argumentos de una función -- ```r ??seq() ``` -- ```r ## from = inicio ## to = final ## by = intervalo ``` -- ```r seq(from=2, to=50, by=3) ``` ``` ## [1] 2 5 8 11 14 17 20 23 26 29 32 35 38 41 44 47 50 ``` --- ### Operadores lógicos Ocupamos operadores lógicos cuando queremos expresar si una afirmación es verdadera (**TRUE** ó **T**) o falsa (**FALSE** ó **F**). -- - Para decir que una negación, usamos el signo de cierre exclamación antes **!** -- - Para decir que es una afirmación, usamos la función **isTRUE()** -- - Para referirnos a una condicion "x" **ó** "y", usamos **|** -- - Para referirnos a una condición "x" **y** "y", usamos **&** --- ### Operadores lógicos #### Algunos ejemplos ```r # El vector constelaciones NO es numérico. Verdadero o falso? !is.numeric(constelaciones) ``` ``` ## [1] TRUE ``` -- ```r # El vector constelaciones es numérico. Verdadero o falso? is.numeric(constelaciones) ``` ``` ## [1] FALSE ``` -- ```r # El vector secuencia es numérico. Verdadero o falso? is.numeric(secuencia) ``` ``` ## [1] TRUE ``` --- ### Operadores lógicos #### Algunos ejemplos ```r # Es numérico secuencia Ó constelaciones. Verdero o falso? is.numeric(secuencia) | is.numeric(constelaciones) ``` ``` ## [1] TRUE ``` -- ```r # Es numérico secuencia Y constelaciones. Verdadero o falso? is.numeric(secuencia) & is.numeric(constelaciones) ``` ``` ## [1] FALSE ``` --- ### Operadores de relaciones Ocupamos operadores de relaciones cuando queremos establecer desigualdades dentro de nuestro conjunto de datos: -- - Menor o mayor que **<**, **>**. -- - Menor o igual, mayor o igual que **=<**, **>=**. -- - Igual a **==** -- - Diferente a **!=** --- ### Operadores de relaciones #### Algunos ejemplos ```r set.seed(100) # Esto garantiza que dentro de la aleatoriedad, # todos tengamos el mismo resultado simulado. aleatorios <- rnorm(n=10, mean=50, sd=10) print(aleatorios) ``` ``` ## [1] 44.97808 51.31531 49.21083 58.86785 51.16971 53.18630 44.18209 57.14533 ## [9] 41.74741 46.40138 ``` -- ```r aleatorios > 50 ``` ``` ## [1] FALSE TRUE FALSE TRUE TRUE TRUE FALSE TRUE FALSE FALSE ``` --- ### Operadores de relaciones #### Algunos ejemplos ```r which(aleatorios > 50) ``` ``` ## [1] 2 4 5 6 8 ``` -- ```r which(aleatorios < 45) ``` ``` ## [1] 1 7 9 ``` --- ### Creando una pequeña base de datos estilo tabla ```r set.seed(100) # Esto garantiza que dentro de la aleatoriedad, # todos tengamos el mismo resultado simulado. vpm1 <- rnorm(n=100, mean=80, sd=5) vpm2 <- rnorm(n=100, mean=75, sd=10) vpm3 <- rnorm(n=100, mean=60, sd=25) tabla <- data.frame(vpm1, vpm2, vpm3) ``` --- ### Creando una pequeña tabla ```r view(tabla) ```
--- ### Creando una pequeña tabla Ahora si nos fijamos, nuestros valores aleatorios se generan con "n" cantidad de decimales, más de los que necesitamos, por lo que tenemos algunas opciones para limitarlos con la funciones: -- ```r # debemos indicar el valor o vector, y el número de decimales. Aproxima el último valor. round(x=77.5492, digits=2) ``` ``` ## [1] 77.55 ``` ```r # debemos indicar el valor o vector, y el número de dÃgitos. Aproxima el último valor. signif(77.5492, 4) ``` ``` ## [1] 77.55 ``` --- ### Creando una pequeña tabla Ahora si nos fijamos, nuestros valores aleatorios se generan con "n" cantidad de decimales, más de los que necesitamos, por lo que tenemos algunas opciones para limitarlos con la funciones: -- ```r # redondea al entero próximo sin aproximar. floor(77.5492) ``` ``` ## [1] 77 ``` ```r # nos permite cortar decimales sin apróximar, dincando el valor o vector, # multiplicarlo por una potencia de 10 (dependiendo de cuantos decimales queremos) # y dividirlo por la misma potencia. trunc(77.5492*100)/100 ``` ``` ## [1] 77.54 ``` --- ### Creando una pequeña tabla Sabiendo ello, tenemos 2 alternativas: a) Alojando una función dentro de otra. ```r set.seed(100) round(rnorm(n=10, mean=80, sd=5), digits=2) ``` ``` ## [1] 77.49 80.66 79.61 84.43 80.58 81.59 77.09 83.57 75.87 78.20 ``` b) Encadenando procesos y la librerÃa **magrittr** que veremos en detalles en la siguiente unidad. --- ### Creando una pequeña tabla ```r tabla_round <- round(tabla, 2) view(tabla) ``` ```r tabla_round <- round(tabla, 2) ```
--- ### Abriendo un archivo tipo tabla ```r # Para abrir un archivo en formato csv: # el argumento dec determina el tipo de separador de decimales, y # el argumento sep el separador de columnas tabla_csv <- read.csv("C:/TuDirectorio/MET_CAUQUENES.csv", dec=".") # Para abrir un archivo en formato xls con libreria readxl library(readxl) tabla_excel <- read_excel("C:/TuDirectorio/MET_CAUQUENES.xls",sheet=1) ``` -- ```r view(tabla_excel) ```
--- ### Manipulando una base de datos estilo tabla Las primeras manipulaciones consisten en: - Sustraer - Filtrar - Modificar o - Agregar Información nueva a nuestra base datos. --- ### Manipulando una base de datos estilo tabla -- **Sustraer** ```r # Opción 1: por nombre de la columna sub_1 <- tabla_csv$PP # Opción 2: por posición de la columna sub_2 <- tabla_csv[,5] # Opción 3: por posición de la fila sub_3 <- tabla_csv[58,] ``` --- ### Manipulando una base de datos estilo tabla **Filtrar** ```r # Opcion 1: por condición según columna filtro_1 <- tabla_csv[which(tabla_csv$Month == 3),] # Opción 2: usando función subset() filtro_2 <- subset(tabla_csv, Month == 8) # Opcion 3: usando la función filter() del paquete dplyr #install.package("dplyr") library(dplyr) filtro_3 <- filter(tabla_csv, Year == 2019) ``` --- **Modificar** ```r # Opción 1: modificar una columna completa mod <- tabla_csv # con esto nos aseguramos de no cometer errores en la original mod$PP <- mod$PP/1000 # para pasar de mm a cm3 # Opción 2: cambiar algunos elementos según condición mod[which(mod$Year < 1990),] <- NA # NA es Not Available o sea sin dato mod <- na.omit(mod) # eliminamos las filas con NA's # se podrÃa haber llegado a este mismo resultado solo filtrando # ... y tantas otras opciones que se nos ocurran ``` **Agregar** ```r mod$Amp <- mod$Tmax-mod$Tmin #creamos una nueva columna amp con la diferencia entre Tmin y Tmax ```
--- ### Manipulando una base de datos estilo tabla Combinemos estas acciones. Se requiere obtener el promedio anual de la temperatura mÃnima, media y máxima para el año 2010. -- ```r # Filtramos nuestros datos al año 2010 filtro_2010 <- filter(tabla_csv, Year == 2010) ``` -- ```r # Seleccionamos las columnas que necesitamos filtro_2010_temperatura <- filtro_2010[,c(5:7)] ``` -- ```r # Usamos la función apply para aplicar una función a todas las columnas o filas temperatura_media_2010 <- apply(X=filtro_2010_temperatura, MARGIN=2, FUN=mean) ``` ``` ## Tmin Tmed Tmax ## 6.713333 13.402500 20.092500 ``` --- ### Manipulando una base de datos estilo tabla Ahora ustedes: ¿Cuál es la temperatura mÃnima promedio para el mes de Abril? -- ```r filtro_abril <- filter(tabla_csv, Month == 4)[,5] mean(filtro_abril) ``` ``` ## [1] 7.270714 ``` --- ### Manipulando una base de datos estilo tabla Ahora ustedes: ¿Cuál es la máxima histórica y la amplitud máxima para el mes de Enero? -- ```r tabla_csv$Amplitud <- tabla_csv$Tmax-tabla_csv$Tmin filtro_enero <- filter(tabla_csv, Month == 1) enero_historica <- apply(X=filtro_enero[,c(7,8)], MARGIN=2, FUN=max) ``` ``` ## Tmax Amplitud ## 29.69 16.48 ``` -- ¿Cuando ocurrió la máxima histórica? -- ```r apply(X=filtro_enero[,c(7,8)], MARGIN=2, FUN=which.max) ``` ``` ## Tmax Amplitud ## 39 39 ``` --- ### Manipulando una base de datos estilo tabla ```r filtro_enero[39,] ```
--- ### Ciclos y Funciones sencillas Un **ciclo** es la repetición de "n veces" una misma rutina. El más conocido y ocupado es el ciclo for que se compone por: <center><img src="data:image/png;base64,#Loop.png" height="150px" /></center> En el ciclo representado la imagen de arriba, nos indica que el "Ãndice" **_i_** en nuestro primer ciclo tomará el valor del número 2, cuando termine ese ciclo, tomará el valor siguiente dentro del rango 2 a 11, es decir el número 3. Por ejemplo: ```r for(i in 1:10){print(9*i)} ``` Significa que en el primer ciclo, imprimirá (print) el resultado de (9 x **_i_**), es decir (9 x **1**), en el segundo (9 x **2**) y siguiento hasta que **_i_** alcance el valor final de nuestro Ãndice, que en este caso es **10**. --- ### Ciclos y Funciones sencillas Crearemos un **ciclo** sencillo en dónde se repita un digitos tantas veces como valor lo indique. ```r for(i in 2:8){ num <- rep(i,i) print(paste("REPITE ESTE NUMERO ",i,", ",i," VECES", sep="")) print(num) } ``` --- ### Ciclos y Funciones sencillas Entonces el resultado de nuestro ciclo serÃa: ```r for(i in 2:8){ num <- rep(i,i) print(paste("REPITE ESTE NUMERO ",i,", ",i," VECES", sep="")) print(num) } ``` ``` ## [1] "REPITE ESTE NUMERO 2, 2 VECES" ## [1] 2 2 ## [1] "REPITE ESTE NUMERO 3, 3 VECES" ## [1] 3 3 3 ## [1] "REPITE ESTE NUMERO 4, 4 VECES" ## [1] 4 4 4 4 ## [1] "REPITE ESTE NUMERO 5, 5 VECES" ## [1] 5 5 5 5 5 ## [1] "REPITE ESTE NUMERO 6, 6 VECES" ## [1] 6 6 6 6 6 6 ## [1] "REPITE ESTE NUMERO 7, 7 VECES" ## [1] 7 7 7 7 7 7 7 ## [1] "REPITE ESTE NUMERO 8, 8 VECES" ## [1] 8 8 8 8 8 8 8 8 ``` --- ### Ciclos y Funciones sencillas Ahora, usaremos los condicionales if() y else() para que cada vez que encuentre una temperatura máxima superior a los 25° nos indique esta cara **(T.T)** y cuando sea menor **(n.n)** -- ```r for(i in 1:nrow(mod)){ val <- mod$Tmax[i] if(val >= 25){ print("(T.T)") } else{ print("(n.n)")} } ``` --- ### Ciclos y Funciones sencillas Ahora, veremos una situación un poco más complicada: .pull-left[ - Supongamos tenemos 10 archivos que contienen información de la temperatura media de algunas ciudades de la región del Maule, y queremos juntarlas en una. - Si nos fijamos, tenemos una columna con la fecha, el año, el mes y otra con el valor de la temperatura media, por lo que tenemos 4 columnas. - Debemos considerar para es ciclo o loop, el que todas las tablas tengan la misma estructura, misma cantidad filas o columnas (para no complejizar el ejercicio). ] -- .pull-right[ <img src="data:image/png;base64,#Tablas_loop.png" width="500px" align = "center"/> ] --- ### Ciclos y Funciones sencillas ```r # Primero: crearemos un objeto indicando el directorio donde están nuestros archivos dir <- "C:/TuDirectorio/" # Segundo: crearemos un nuevo objeto con un enlistado de las direcciones para cada archivo ... vector_directorio <- list.files(path=dir, pattern = glob2rx("*.csv"),full.names = T) # glob2rx nos posibilita filtrar según un enunciado. #Tercero: abriremos la primera tabla en la que pegaremos la informacion de las siguientes tabla_meteo <- read.csv(vector_directorio[1]) # Tercero: preparamos nuestro ciclo for(i in 2:10){ #a) leemos nuestro archivo tabla_meteo_i <- read.csv(vector_directorio[i]) #b) pegamos la 4 columna de nuestro archivo usando la funcion cbind, # reemplazando la tabla original tabla_meteo <- cbind(tabla_meteo,tabla_meteo_i[,4]) print(paste("LISTA TABLA N°",i,"DE 10",sep=" ")) } ``` --- ### Ciclos y Funciones sencillas ```r view(tabla_meteo) ```
--- ### Ciclos y Funciones sencillas Ahora es importante cambiarle el nombre a nuestras columnas que quedaron sin nombre. Si nos fijamos en nuestro vector con las rutas a nuestros archivos, contienen los nombres de los puntos de temperatura: ```r # dejamos el argumento full.names = F para que solo nos muestre el nombre del archivo # y no la ruta completa list.files(path=dir, pattern=glob2rx("*.csv"), full.names = F) ``` ``` ## [1] "Tmean_Cauquenes.csv" "Tmean_Chanco.csv" "Tmean_Constitucion.csv" ## [4] "Tmean_Curepto.csv" "Tmean_Curico.csv" "Tmean_Linares.csv" ## [7] "Tmean_LosRiscos.csv" "Tmean_Robleria.csv" "Tmean_Talca.csv" ## [10] "Tmean_Vichuquen.csv" ``` -- Veremos que hasta "Tmean_" todos los archivos comparten la misma ruta (directorio, carpeta) y comienzan con el mismo nombre. Dependiendo del nombre de cada archivo, cada vector que contiene la "ruta + nombre.csv", tiene una distinta cantidad de caracteres. --- ### Ciclos y Funciones sencillas Por ejemplo: "Tmean_Cauquenes.csv" tiene 19 caracteres y "T_meanLinares.csv" tiene 17. <center><img src="data:image/png;base64,#caracteres.png" height="150px" /></center> De esta forma, sabiendo que hay una constante entre el numero de caracteres antes del nombre (Tmean_), y la misma cantidad de caracteres de la extension (.csv) podemos extraer el nombre usando la funcion _substr()_ y _nchar_: **substr()** nos permite substraer parte de un vector de numérico o alfanumérico, indicando la posición, y **nchar()** nos indica el número de caracteres total de un posiciones de un vector, al cual le restaremos 4 que es la cantidad de posiciones que tiene la extensión del archivo (.csv). --- ### Ciclos y Funciones sencillas ```r nombre_archivo <- list.files(path=dir, pattern=glob2rx("*.csv"), full.names = F) nombre_temperatura <- substr(x=nombre_archivo, start=7, stop=nchar(nombre_archivo)-4) print(nombre_temperatura) ``` ``` ## [1] "Cauquenes" "Chanco" "Constitucion" "Curepto" "Curico" ## [6] "Linares" "LosRiscos" "Robleria" "Talca" "Vichuquen" ``` -- La función **names()** nos permite ver los nombres de nuestra columnas (o variables, dependiendo de la clase del objeto). A su vez, nos permite renombrar las columnas de nuestro data frame (u otra clase de objeto), asignandole un vector que contega los nombres, para ello vamos a escribir: -- ```r names(tabla_meteo) ``` ``` ## [1] "Date" "Year" "Month" ## [4] "Tmed" "tabla_meteo_i[, 4]" "tabla_meteo_i[, 4]" ## [7] "tabla_meteo_i[, 4]" "tabla_meteo_i[, 4]" "tabla_meteo_i[, 4]" ## [10] "tabla_meteo_i[, 4]" "tabla_meteo_i[, 4]" "tabla_meteo_i[, 4]" ## [13] "tabla_meteo_i[, 4]" ``` ```r names(tabla_meteo)[4:13] <- nombre_temperatura ``` --- ```r view(tabla_meteo) ```
--- ### Guardar nuestra base de datos ```r # Si queremos guardar nuestra tabla como un csv escribimos... write.csv(tabla_meteo,"C:/TuDirectorio/TuNombreDeArchivo.csv", row.names=F) # Si la queremos guardar como excel usamos la libreria xlsx #install.packages(writexl) writexl::write_xlsx(tabla_meteo, "C:/TuDirectorio/TuNombreDeArchivo.xlsx") ``` --- ### Ciclos y Funciones sencillas Crearemos una **función** que calcule grados Fahrenheit a partir de grados Celsius -- ```r CaF <- function(C_temp){ (C_temp*9/5)+32 } ``` -- ```r # Calculamos para un valor CaF(C_temp = 25) ``` ``` ## [1] 77 ``` ```r # Calculamos para un vector numérico print(tabla_meteo$Cauquenes[1:10]) # revisamos los 10 primeros valores de Cauquenes ``` ``` ## [1] 19.66 19.09 17.43 14.65 12.18 8.54 9.69 11.00 10.51 12.94 ``` ```r CaF(C_temp = tabla_meteo$Cauquenes)[1:10] ``` ``` ## [1] 67.388 66.362 63.374 58.370 53.924 47.372 49.442 51.800 50.918 55.292 ``` --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Barras** simple ```r cauquenes_2019 <- filter(tabla_meteo[,1:4], Year == 2019) barplot(cauquenes_2019$Cauquenes) ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-65-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Barras** con color ```r barplot(cauquenes_2019$Cauquenes, col="red") ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-67-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Barras** con color y lÃmite del eje Y definido ```r barplot(cauquenes_2019$Cauquenes, col="red", ylim=c(0,25)) ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-69-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Barras** con color, lÃmite del eje Y definido y nombres de las barras ```r barplot(cauquenes_2019$Cauquenes, col="red", ylim=c(0,25), names=month.abb) ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-71-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Barras** con color, lÃmite del eje Y definido, nombres de las barras y nombres de ejes ```r barplot(cauquenes_2019$Cauquenes, col="red", ylim=c(0,25), names=month.abb, ylab = "Temperatura (°C)", xlab = "Meses") ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-73-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Puntos** simples ```r tabla_meteo$Date <- as.Date(tabla_meteo$Date, format="%Y-%m-%d") plot(x=tabla_meteo$Date, y=tabla_meteo$Cauquenes) ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-75-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Puntos** con distintas formas y colores ```r plot(x=tabla_meteo$Date, y=tabla_meteo$Cauquenes, pch=8, col="red", ylab="Temperatura Media (C°)", xlab="Años") ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-77-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) <center><img src="data:image/png;base64,#Symbol.png" height="500px" /></center> --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Lineas** ```r #A diferencia con el plot anterior ya no usamos el argumento pch, y usamos type para indicar line plot(x=tabla_meteo$Date, y=tabla_meteo$Cauquenes, type="l", col="red", ylab="Temperatura Media (C°)", xlab="Años") ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-79-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Lineas y puntos** ```r plot(x=tabla_meteo$Date, y=tabla_meteo$Cauquenes, pch=20, col ="brown", ylab ="Temperatura Media (C°)", xlab ="Años") # Para agregar las lineas sobre los puntos, usamos la funcion lines() lines(x=tabla_meteo$Date, y=tabla_meteo$Cauquenes, col ="red") ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-81-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Boxplot** ```r boxplot(tabla_meteo$Cauquenes~tabla_meteo$Month, col= rainbow(12), names=c("Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"), xlab= "Meses", ylab="Temperatura Media (C°)") ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-83-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Histograma** ```r hist(tabla_meteo$Cauquenes, breaks= 50, col= "red", xlab= "Temperatura Media (C°)", ylab= "Frecuencia", main= "Histograma de Precipitaciones; breaks=50") ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-85-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Histograma con boxplot** ```r par(mfrow=c(2,1)) # distribuimos el plot en 2 filas 1 columna par(mar=c(2,2,2,2)) # incluimos 2 lineas de separación entre plots boxplot(tabla_meteo$Cauquenes, horizontal=T) hist(tabla_meteo$Cauquenes, breaks= 50, col= "red",main="") ``` --- ### Visualización de nuestra información (Graficar/Plotear) **Histograma con boxplot** <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-87-1.png" width="100%" /> --- ### BibliografÃa 2018 Mas, Jean-Francois. _Análisis espacial con R. Usa R como un Sistema de Información Geográfica_. European Scientific Institute, Republic of Macedonia. 2015 McNeill Mhairi. _Base R (RStudio Cheatsheet)_. Disponible en Aula virtual. 2020 R. _The R Project for Statistical Computing_. <a href="https://www.r-project.org/"> (Online) </a><br> 2011 Teetor Paul. _R Cookbook: Proven Recipes for Data Analysis, Statistics, and Graphics_. Versión en Linea por Chang Winston. <a href="http://www.cookbook-r.com/"> (Online) </a><br> --- class: inverse middle 